Introducción al lenguaje R

Unidad 1

Introducción al lenguaje R aplicado a sistemas y servicios de salud


Unidad 1: Instalación e introducción al lenguaje R

Unidad 2: Procesamiento de datos

Unidad 3: Exploración, diagnóstico y limpieza de datos

Unidad 4: Tratamiento de datos específicos

Unidad 5: Estadísticos, operaciones múltiples y resúmenes

Unidad 6: Visualización de datos

Unidad 7: Control de flujo y funciones

Unidad 8: Comunicar con Quarto

Esquema de trabajo


  • Los jueves comenzamos un nuevo tema en el aula virtual con material teórico-práctico, recursos extras, enlaces, bibliografía complementaria y el encuentro sincrónico de la unidad de 10 a 12 hs.
  • Los viernes tendremos los encuentros sincrónicos prácticos de 9 a 11 hs.
  • Las unidades coinciden con las semanas y tendran una práctica para desarrollar. Al finalizar las unidades tendrán que resolver un trabajo práctico integrador.


Importante

El sincrónico del jueves 1 de mayo, al ser feriado, será grabado previamente y subido al aula virtual.

Trabajos prácticos


  • Cada unidad tiene su trabajo práctico.

  • Es importante que lo intenten hacer y utilicen el foro para consultar las dudas y problemas.

  • Al finalizar cada unidad se subirá una resolución al aula virtual.

  • El trabajo practico integrador se inicia con la unidad 8 y se entrega el 6/6/2025.


Nota

Estas fechas pueden sufrir cambios como resultado del desarrollo de la cursada.

Lenguaje R


El sitio oficial del lenguaje dice que:

“R es un entorno de software libre para gráficos y computación estadística.

Se compila y se ejecuta en una amplia variedad de plataformas UNIX, Windows y MacOS.”


Profundizando en su descripción podemos decir, más técnicamente, que:

es un lenguaje de programación interpretado, orientado a objetos, multiplataforma y open source pensado para el manejo de datos estadísticos.

Por lo tanto

…es un lenguaje de programación estadístico

Básicamente es un lenguaje de programación, con sus estructuras y reglas de sintaxis, que posee una gran variedad de funciones desarrolladas para estadística y otras librerías con diversas aplicaciones.

…es un lenguaje Orientado a Objetos

Implementa los conceptos de la programación orientada a objetos y esto le otorga simpleza y flexibilidad en el manejo de datos.

…es un lenguaje interpretado

No es necesario compilar el código para construir ejecutables sino que directamente se ejecuta por medio del intérprete que el software instala.

…es multiplataforma

Se puede instalar en diferentes sistemas operativos como Linux, Windows y Mac.

…es Open Source y se distribuye bajo licencia GNU - GPL

Se distribuye gratuitamente bajo licencia GNU (General Public License) – GPL y que los usuarios tienen la libertad de usar, estudiar, compartir (copiar) y modificar el software.

Historia


R es un lenguaje que fue desarrollado a partir del lenguaje S que a su vez tiene sus orígenes en Bell Labs de la AT&T (actualmente Lucent Technologies) de mediados de la década del ’70. Posteriormente, S fue vendido y dio origen a una versión propietaria denominada S-Plus que es comercializada por Insighful Corporation.


En 1995 dos profesores de estadística de la Universidad de Auckland, en Nueva Zelanda (Ross Ihaka y Robert Gentleman, iniciaron el “Proyecto R”, con la intención de desarrollar un programa estadístico inspirado en el lenguaje S pero de dominio público.


Funcionamiento


Usuarios del lenguaje y enfoque “comunicativo”


  • Plantea abordar el lenguaje R como un lenguaje para “comunicarse” (similar a un segundo lenguaje como el inglés, francés, etc.)

  • Al dotar a R de una estructura particular semántica, gramatical y sintáctica.

  • Se busca comenzar a “decir cosas con datos” y luego profundizar en las estructuras del lenguaje.

  • Diferencias entre ser “usuario” y “programador”

  • Propuesto por Riva Quiroga de LatinR en el encuentro global de RStudio de 2021. Para profundizar ver ponencia “How to do things with words: Learning to program with a ‘communicative approach’” en rstudio::global(2021)

R es un lenguaje de funciones (y argumentos)


Una función es un bloque de código que sólo se ejecuta cuando se llama.

  • Existen funciones que forman parte de la base del lenguaje y otras que estan empaquetadas en librerías.

  • Todas las funciones devuelven algo. Datos, un resultado o una acción determinada.

  • La mayoría necesitan de ciertos datos que se declaran dentro de la función denominados argumentos. Algunos son obligatorios y otros opcionales.

  • Toda función se escribe con una sintaxis precisa y finaliza siempre con paréntesis. Los argumentos se separan por comas.

Paquetes de R


  • Paquete es sinónimo de librería y contiene una serie de funciones y/o datos con su documentación.

  • El conjunto base de R tiene varias funciones fundamentales contenidas en algunos paquetes (base, stats, utils, graphics, methods, etc)

  • Los paquetes se instalan, activan y desactivan. El sitio oficial donde se publican se encuentra en CRAN - packages

  • Visto como un lenguaje (idioma) los paquetes vendrían a ser conjuntos de palabras que “agregamos” a nuestro vocabulario para poder “comunicarnos” mejor o más fácilmente con el interprete de R.





  • IDE - Entorno de Desarrollo Integrado
  • Paneles
  • Proyectos
  • Scripts
  • Herramientas de edición
  • Gestión de paquetes

Tidyverse




Una colección de paquetes de R modernos, que comparten una gramática y filosofía común, diseñados para resolver los desafíos de la ciencia de datos.


Fundamentos

  • Estructura ordenada de datos (tidy)

    • Cada variable es una columna de la tabla de datos

    • Cada observación es una fila de la tabla de datos

    • Cada tabla responde a una unidad observacional

  • Principios básicos

    • Reutilizar las estructuras de datos mediante el uso de tuberías

    • Resolver problemas complejos combinando varias piezas sencillas

    • Diseño para humanos incorporando una gramática específica al lenguaje (que ya posee una sintaxis estricta y una semantica que le otorga significado)

Tuberías


Las tuberías son operadores que permiten “canalizar” un objeto hacia una función o llamar a una expresión, lo que le permite expresar una secuencia de operaciones que transforman un objeto.


Existen dos tuberías conocidas:

%>% perteneciente al paquete magrittr del tidyverse

|> que es la propuesta nativa de R base a partir de la versión 4.1.0

La mayoría de los scripts del curso muestran la tubería nativa, pero se puede utilizar cualquiera de las dos.

Tuberías


Para el uso general, la utilización de las dos tuberías es la misma, es decir que la forma simple de las tuberías inserta el lado izquierdo como primer argumento en la llamada del lado derecho.

Esto posibilita la reutilización de las estructuras de datos y la escritura de porciones de código similares a “oraciones” de un párrafo.

Pulse aquí para ver algunas caracteristicas comparativas de estas tuberías.

Estructura de datos


Las estructuras de datos son los objetos contenedores de datos que el lenguaje ofrece.

Existe una variedad de estructuras de datos: vectores, matrices, arrays, dataframes, listas, etc.

Vamos a describir a las más relevantes dentro del ecosistema tidyverse y que serviran en estos inicios del curso: Los vectores y los dataframes.

Vectores


  • Son secuencias de elementos del mismo tipo de datos.

  • Tienen dos atributos principales: longitud y tipo de datos.

  • Los 6 tipos de datos que usaremos en R son:

    1. logical (TRUE - FALSE)
    2. integer (15)
    3. double (24.64)
    4. character ("Hola")
    5. factors ("Si" - "No" - "Ns/Nc")
    6. date/datetime ("2023-10-09" - "2023-10-09 01:00:00")
  • Los vectores integer y double se conocen como vectores numéricos (numeric).

Dataframes


  • Un dataframe, que se traduce como marco de datos, es similar a una tabla de datos construida por una colección de vectores ubicados verticalmente que mantienen la integridad de sus filas.

  • Tienen dos dimensiones, las columnas verticales llamadas variables y las filas horizontales llamadas observaciones.

  • Las columnas pueden ser de diferentes tipos, pero todas las filas de cada columna pueden tener un mismo tipo de dato.

  • La combinación de datos de las diferentes columnas que conforman una fila es fija, por lo que se asegura la integridad de estas observaciones (principio de las bases de datos).


Tibbles


  • Los tibbles son una versión moderna del dataframe que introduce tidyverse.

  • Tienen las mismas características que un dataframe normal con algunos atributos más agradables.

  • Cuando importemos tablas de datos, estos se almacenarán como dataframes/tibbles.

  • Dado que estamos centrados en tidyverse, utilizaremos los términos dataframe y tibble como sinónimos entre sí para su uso general.

  • Los dataframes/tibbles son el tipo de datos fundamental en la mayoría de los análisis que llevaremos adelante.

Archivos de datos


  • El formato de archivos de datos estándar y universal es el texto plano separado por comas (archivos csv)

  • Se pueden importar otros formatos comunes como .xlsx, o específicos provenientes de Stata, SPSS, y otros softwares de análisis a partir de paquetes que integran el tidyverse.

  • Estas tablas de datos tienen las variables ubicadas en las columnas y las observaciones en las filas.

  • El objeto al que asignemos la importación de estos archivos siempre será un dataframe/tibble.

  • Otro formato de datos propio de R es .RData, que permite guardar varios objetos del lenguaje (vectores, dataframes, etc.) simultáneamente. Es como almacenar el entorno de trabajo completo.

Errores y advertencias

Ayuda


  • Todas las funciones del R base o de los paquetes vienen acompañadas con su respectiva documentación.

  • Esta documentación se puede visualizar en el panel Help de RStudio navegando como si fuese un navegador web.

  • La documentación tiene una estructura que se repite: descripción, uso, argumentos, detalles, valores, ejemplos.

  • También se pueden hacer busquedas en buscadores web como Google, foros especializados, como por ejemplo Stack Overflow o Rpubs, canales de slack y más recientemente en IAs como chatGPT o Google Gemini.

Importar y exportar archivos de datos


  • En el mundo informático existen numerosos formatos de archivos de tablas / base de datos.

  • El lenguaje R permite importar y exportar de una amplia variedad de formatos a partir de utilizar diferentes paquetes. Muchos de ellos pertenecientes al ecosistema tidyverse.

  • Hoy nos vamos a centrar en dos formatos básicos habituales donde tenemos almacenada comúnmente la información:

    • Archivos texto plano separados por comas u otro caracter (extensiones .csv, .txt, etc)
    • Archivos con formato Excel (.xls y .xlsx)
  • Además mencionaremos otros formatos posibles y el propio de R

Paquete readr

El paquete readr se instala y activa cuando ejecutamos library(tidyverse).

  • Contiene una familia de funciones que permiten leer y escribir archivos de texto plano separados como coma o algún otro caracter (tabulación, punto y coma, etc)

  • Sus funciones de lectura comienzan todas con read_

  • Sus funciones de escritura comienzan con write_


Lectura con funciones de readr


La primera función de lectura que vamos a presentar es read_delim()

El estructura de esta función sirve de base para las demás.

Sus principales argumentos son:

  • file: nombre del archivo

  • delim: caracter separador de columna

  • col_names: Valor lógico. Si es TRUE lee la primera fila como nombres de las variables. Si es FALSE no lo hace.

  • skip: número de líneas que saltea para comenzar a leer.

Lectura con funciones de readr


La función tiene numerosos argumentos que nos permite controlar eficazmente la lectura, como vemos debajo, pero se suelen modificar pocos de ellos en la mayoría de las situaciones.

args(readr::read_delim)
function (file, delim = NULL, quote = "\"", escape_backslash = FALSE, 
    escape_double = TRUE, col_names = TRUE, col_types = NULL, 
    col_select = NULL, id = NULL, locale = default_locale(), 
    na = c("", "NA"), quoted_na = TRUE, comment = "", trim_ws = FALSE, 
    skip = 0, n_max = Inf, guess_max = min(1000, n_max), name_repair = "unique", 
    num_threads = readr_threads(), progress = show_progress(), 
    show_col_types = should_show_types(), skip_empty_rows = TRUE, 
    lazy = should_read_lazy()) 
NULL

Lectura con funciones de readr


Para archivos separados por comas en formato regional Estadounidense se utiliza la función read_csv().

Tiene la misma base de read_delim() pero asume:

  • que el caracter delimitador es la coma “,”
  • que el caracter separador de coma decimal es el punto “.”
read_csv(file = "datos.csv")

Lectura con funciones de readr


Para archivos separados por comas en formato regional Español/Argentino se utiliza la función read_csv2().

Tiene la misma base de read_delim() pero asume:

  • que el caracter delimitador es el punto y coma “;”
  • que el caracter separador de coma decimal es la coma “,”
read_csv2(file = "datos.csv")

Lectura de múltiples archivos


En ocasiones trabajamos con múltiples archivos que tienen una misma estructura interna, por ejemplo provenientes de proyectos longitudinales de vigilancia epidemiológica. Supongamos que tenemos el caso de vigilancia de una enfermedad donde se produce un archivo por mes, tipo 01_SUH.csv, 02_SUH.csv, 03_SUH.csv, etc hasta el mes 12.

Podemos almacenar los nombre de los archivos en un vector y luego leerlos todos juntos, incorporando la identificación del archivo.

archivos_SUH <- c("datos/01-SUH.csv", "datos/02-SUH.csv", "datos/03-SUH.csv")
read_csv(archivos_SUH, id = "archivo")

#>   archivo           mes     anio   ID    edad  
#>   <chr>             <chr>   <dbl>  <dbl> <dbl>
#> 1 datos/01-SUH.csv Enero  2019     1234     3
#> 2 datos/01-SUH.csv Enero  2019     8721     9
#> 3 datos/01-SUH.csv Enero  2019     1822     2

Herramienta de lectura de RStudio


Paquete readxl

El paquete readxl se instala con tidyverse pero hay que activarlo aparte mediante library(readxl).

  • Contiene funciones que permiten leer archivos de Microsoft Excel tan extendidos en nuestro trabajo cotidiano.

  • La función comodín para leer, tanto formatos .xls como .xlsx, es read_excel()


Lectura con funciones de readxl


La estructura de los argumentos de la función read_excel() es:

  • path: nombre del archivo

  • sheet: hoja del libro del archivo Excel

  • range: rango de celdas (opcional)

  • col_names: Valor lógico. Si es TRUE lee la primera fila como nombres de las variables. Si es FALSE no lo hace.

  • skip: número de líneas que saltea para comenzar a leer.

Paquete haven

Este paquete permite la importación de archivos provenientes de paquetes estadísticos como SPSS (.sav), Stata (.dta) y SAS (.sas7bdat) y también su exporatción.

  • Sus funciones principales son read_spss(), read_por(), read_stata(), read_dta(), read_sas()

  • Las funciones de exportación comienzan con el prefijo write_

  • Utiliza la librería ReadStat hecha en lenguaje C por Evan Miller.

  • Tiene algunas limitaciones dependiendo de las versiones de los softwares.

Formato nativo R


El propio lenguaje R tiene un formato nativo de almacenamiento del entorno de trabajo produciendo archivos con extención .RData.

Las funciones, pertenecientes a R base, para guardar y leer los .RData son:

  • save(): almacena el contenido del entorno de trabajo, pudiendo seleccionar cual o cuales objetos deseamos guardar.

  • load(): lee archivos .RData y su contenido (sea este uno o varios objetos)

Cabe aclarar que cuando nos referimos a objetos estamos hablando de cualquier estructura de datos como dataframes, vectores, matrices, etc y también funciones propias.

Documentación


Capítulo 7 del libro “R for Data Science (2e)”